home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1998 / MacHack 1998.toast / The Hacks! / COSEmulator / COSEmulator- SRC / src / MenuItem.cpp < prev    next >
Encoding:
Text File  |  1998-06-21  |  5.3 KB  |  230 lines  |  [TEXT/CWIE]

  1. //===================================================================
  2. //=======================  Headers        =============================
  3.  
  4. #include "MenuItem.h"
  5. #include "GameUtilities.h"
  6. #include "Screen.h"
  7. #include "MenuBar.h"
  8.  
  9. #include "string.h"
  10.  
  11. //===================================================================
  12. //=======================  Globals        =============================
  13.  
  14.  
  15. rect            titleBuffLoc[ kNumberOfTitles ];    // in buffer
  16. OffScreenBuff    title;
  17. //===================================================================
  18. //=======================  #define        =============================
  19.  
  20.  
  21. //===================================================================
  22. //=======================  Function Prototypes    =====================
  23.  
  24.  
  25. /*----------------------------------------------------------------------------\
  26.  
  27.     InitMenuItems
  28.  
  29. \----------------------------------------------------------------------------*/
  30. void    InitMenuItems( void )
  31. {
  32.     MySetRect( &titleBuffLoc[ kAppleMenuTitle ] , 0 , 0 , 30 , 20 );
  33.     MySetRect( &titleBuffLoc[ kAppListMenuTitle ] , 30 , 0 , 60 , 20 );
  34.     MySetRectWH( &titleBuffLoc[ kFileMenuTitle ] , 0 , 20 , 35 , 20 );
  35.     MySetRectWH( &titleBuffLoc[ kEditMenuTitle ] , 35 , 20 , 40 , 20 );
  36.     MySetRectWH( &titleBuffLoc[ kViewMenuTitle ] , 75 , 20 , 40 , 20 );
  37.     MySetRectWH( &titleBuffLoc[ kSpecialMenuTitle ] , 120 , 20 , 56 , 20 );    
  38.     MySetRectWH( &titleBuffLoc[ kHelpMenuTitle ] , 176 , 20 , 45 , 20 );
  39.     MySetRectWH( &titleBuffLoc[ kImageMenuTitle ] , 220 , 20 , 55 , 20 );
  40.     MySetRectWH( &titleBuffLoc[ kLayerMenuTitle ] , 0 , 40 , 48 , 20 );
  41.     MySetRectWH( &titleBuffLoc[ kSelectMenuTitle ] , 48 , 40 , 52 , 20 );
  42.     MySetRectWH( &titleBuffLoc[ kFilterMenuTitle ] , 100 , 40 , 48 , 20 );
  43.     MySetRectWH( &titleBuffLoc[ kWindowMenuTitle ] , 148 , 40 , 62 , 20 );
  44.     
  45.     title.LoadPicBuff( 131 );
  46. }
  47.  
  48. /*----------------------------------------------------------------------------\
  49.  
  50.     MenuItem :: Constructor
  51.  
  52. \----------------------------------------------------------------------------*/
  53.     MenuItem :: MenuItem( void )
  54. {
  55.     memset( &titleLoc , 0 , sizeof( titleLoc ) );
  56.     which = 0;
  57.     highlight = false;
  58. }
  59.  
  60. /*----------------------------------------------------------------------------\
  61.  
  62.     MenuItem :: SetWhichMenu
  63.  
  64. \----------------------------------------------------------------------------*/
  65. void    MenuItem :: SetWhichMenu( uchar w )
  66. {
  67.     which = w;
  68.     MenuItemWindow::SetType( w );
  69. }
  70.  
  71. /*----------------------------------------------------------------------------\
  72.  
  73.     MenuItem :: SetLocation
  74.  
  75. \----------------------------------------------------------------------------*/
  76. void    MenuItem :: SetLocation( short start )
  77. {
  78.     titleLoc.top = 0;
  79.     titleLoc.bottom = 20;
  80.     titleLoc.left = start;
  81.     
  82.     titleLoc.right = start;
  83.     
  84.     switch( which )
  85.     {
  86.     case kAppleMenuTitle:
  87.     case kAppListMenuTitle:
  88.         titleLoc.right += 30;
  89.     break;
  90.     
  91.     case kFileMenuTitle:
  92.         titleLoc.right += 35;
  93.     break;
  94.     
  95.     case kEditMenuTitle:
  96.         titleLoc.right += 40;
  97.     break;
  98.     
  99.     case kViewMenuTitle:
  100.         titleLoc.right += 40;
  101.     break;
  102.     
  103.     case kSpecialMenuTitle:
  104.         titleLoc.right += 56;
  105.     break;
  106.     
  107.     case kHelpMenuTitle:
  108.         titleLoc.right += 45;
  109.     break;
  110.     
  111.     case kImageMenuTitle:
  112.         titleLoc.right += 55;
  113.     break;
  114.     
  115.     case kLayerMenuTitle:
  116.         titleLoc.right += 48;
  117.     break;
  118.     
  119.     case kSelectMenuTitle:
  120.         titleLoc.right += 52;
  121.     break;
  122.     
  123.     case kFilterMenuTitle:
  124.         titleLoc.right += 48;
  125.     break;
  126.     
  127.     case kWindowMenuTitle:
  128.         titleLoc.right += 62;
  129.     break;
  130.     }
  131.     
  132.     MenuItemRect( &titleLoc );
  133. }
  134.  
  135. /*----------------------------------------------------------------------------\
  136.  
  137.     MenuItem :: GetLoc
  138.  
  139. \----------------------------------------------------------------------------*/
  140. rect    MenuItem :: GetLoc( void )
  141. {
  142.     return titleLoc;
  143. }
  144.  
  145. /*----------------------------------------------------------------------------\
  146.  
  147.     MenuItem :: DrawMenu
  148.  
  149. \----------------------------------------------------------------------------*/
  150. void    MenuItem :: DrawMenu( rect * where )
  151. {
  152.     if( where == NULL )
  153.     {
  154.  
  155.         if( highlight )
  156.         {
  157.             menuBar.DrawGeneric( &title , &titleBuffLoc[ which ] ,
  158.                                  &titleLoc , NULL , kDrawInverse , 
  159.                                  0 , 0 );
  160.         }
  161.         else
  162.         {
  163.             menuBar.DrawGeneric( &title , &titleBuffLoc[ which ] ,
  164.                                  &titleLoc , NULL , 0 , 
  165.                                  0 , 0 );
  166.         }
  167.     }
  168.     else
  169.     {
  170.         if( highlight )
  171.         {    
  172.             menuBar.DrawGeneric( &title , &titleBuffLoc[ which ] ,
  173.                                  &titleLoc , where , kDrawInverse , 
  174.                                  0 , 0 );
  175.         }
  176.         else
  177.         {
  178.             menuBar.DrawGeneric( &title , &titleBuffLoc[ which ] ,
  179.                                  &titleLoc , where , 0 , 
  180.                                  0 , 0 );
  181.         }
  182.     }
  183. }
  184.  
  185. /*----------------------------------------------------------------------------\
  186.  
  187.     MenuItem :: SetActive
  188.  
  189. \----------------------------------------------------------------------------*/
  190. void    MenuItem :: SetActive( Boolean h )
  191. {
  192.     if( h != highlight )
  193.     {
  194.         highlight = h;
  195.         
  196.         AddRectToUpdate();
  197.         
  198.         if( highlight )
  199.         {
  200.             MenuItemWindow::SetActive( true );
  201.         }
  202.         else
  203.         {
  204.             MenuItemWindow::SetActive( false );
  205.         }
  206.     }
  207. }
  208.  
  209. /*----------------------------------------------------------------------------\
  210.  
  211.     MenuItem :: PointInTitle
  212.  
  213. \----------------------------------------------------------------------------*/
  214. Boolean    MenuItem :: PointInTitle( point where )
  215. {
  216.     return SectPtRect( where , titleLoc );
  217. }
  218.  
  219. /*----------------------------------------------------------------------------\
  220.  
  221.     MenuItem :: AddRectToUpdate
  222.  
  223. \----------------------------------------------------------------------------*/
  224. void    MenuItem :: AddRectToUpdate( void )
  225. {
  226.     screen.AddRectToUpdate( titleLoc );
  227. }
  228.  
  229.  
  230.